package com.wlz.java8.lambda;

import com.wlz.java8.lambda.unctionalInterface.Operation;
import org.junit.Test;

/**
 * @author： wlz
 * @Date 2020/7/3 10:32
 * @description： 函数式接口
 * @version: 1.0
 *      1.lambda 表达式需要函数式接口的支持
 *      2.函数式接口定义:接口中只有一个抽象方法的接口，称为函数式接口
 *      3.可以使用注解 @FunctionalInterface 修饰，其修饰作用为:限定该接口必须为函数式接口，
 *          即该接口中有且只有一个抽象方法。否则无法通过编译，即可以检查是否为函数式接口
 */
public class Demo3 {

    public void op(Long l1, Long l2, Operation<Long,Long> operation){
        System.out.println(operation.operation(l1,l2));
    }

    /**
     * 方案一 写具体实现方法再直接使用
     */
    @Test
    public void test() {
        op(10L,10L,(x,y) -> x*y);
        op(100L,200L,(x,y) -> x+y);
    }

    /**
     * 先使用lambda表示具体实现方法体，再进行接口中的方法调用，传入具体值：
     */
    @Test
    public void test1() {
        Operation<Integer, Integer> operation = (x,y) -> x*y;
        System.out.println(operation.operation(10,10));

    }







}
